The present invention relates to techniques for analyzing (e.g., optimization, locating errors or "debugging") software applications. More specifically, the invention relates to techniques for storing information about objects existing during run-time of an application on a Java.TM. virtual machine for later analysis.
The Java.TM. programming language is an object-oriented high level programming language developed by Sun Microsystems and designed to be portable enough to be executed on a wide range of computers ranging from small devices (e.g., pagers, cell phones and smart cards) up to supercomputers. Computer programs written in Java (and other languages) may be compiled into virtual machine instructions for execution by a Java virtual machine. In general the Java virtual machine is an interpreter that decodes and executes the virtual machine instructions.
The virtual machine instructions for the Java virtual machine are bytecodes, meaning they include one or more bytes. The bytecodes are stored in a particular file format called a "class file" that includes bytecodes for methods of a class. In addition to the bytecodes for methods of a class, the class file includes a symbol table as well as other ancillary information.
A computer program embodied as Java bytecodes in one or more class files is platform independent. The computer program may be executed, unmodified, on any computer that is able to run an implementation of the Java virtual machine. The Java virtual machine is a software emulator of a "generic" computer that is a major factor in allowing computer programs for the Java virtual machine to be platform independent.
The Java virtual machine is commonly implemented as a software interpreter. Conventional interpreters decode and execute the virtual machine instructions of an interpreted program one instruction at a time during execution, which is in contrast to compilers that decode source code into native machine instructions prior to execution so that decoding is not performed during execution. Typically, the Java virtual machine will be written in a programming language other than the Java programming language (e.g., the C++ programming language). Therefore, execution of a Java program may involve execution of functions written in multiple programming languages. Additionally, the bytecodes themselves may call functions (e.g., system functions for input/output) that are not written in the Java programming language. It is therefore common for an executing Java program to entail the execution of functions that were written in multiple programming languages.
Although it is a goal of object-oriented programs to allow for the reuse of tested source code and therefore a reduction in the number of run-time errors, Java programs may still benefit from analysis techniques that provide a window into the operation of the program during run-time. For example, the analysis may be utilized to optimize the program or locate bugs in the code. Accordingly, it would be desirable to provide innovative techniques of analyzing applications executing on a Java virtual machine. Additionally, it would be beneficial to provide a snapshot of objects that exist during run-time of an application so that, for example, memory leaks may be detected.